package cn.stylefeng.guns.modular.inventory.service;

import cn.stylefeng.guns.modular.order.domain.dto.OrderDTO;
import cn.stylefeng.guns.modular.wms.domain.dto.PurchaseInputOrderDTO;
import cn.stylefeng.guns.modular.wms.domain.dto.ReturnGoodsInputOrderDTO;

/**
 * 库存中心的对外接口
 * @author allen
 * @version 1.0
 * @date 2021/4/11 23:23
 */
public interface InventoryFacadeService {

    /**
     * 通知订单中心，完成采购入库 事件发生了
     * @param purchaseInputOrderDTO 采购入库单的DTO对象
     * @return 处理结果
     */
    Boolean informPurchaseInputFinished(PurchaseInputOrderDTO purchaseInputOrderDTO);

    /**
     * 通知订单中心，提交订单事件发生了
     * @param orderDTO 订单的DTO对象
     * @return 处理结果
     */
    Boolean informSubmitOrderEvent(OrderDTO orderDTO);

    /**
     * 通知订单中心，支付订单事件发生了
     * @param orderDTO  订单的DTO对象
     * @return 处理结果
     */
    Boolean informPayOrderEvent(OrderDTO orderDTO);


    /**
     * 通知库存中心，取消订单事件发生了
     * @param orderDTO 订单DTO对象
     * @return 处理结果
     */
    Boolean informCancelOrderEvent(OrderDTO orderDTO);

    /**
     * 通知库存中心，执行退货入库
     * @param returnGoodsInputOrderDTO 退货入库单的DTO对象
     * @return 处理结果
     */
    Boolean informReturnGoodsInputFinished(ReturnGoodsInputOrderDTO returnGoodsInputOrderDTO);

    /**
     * （1） 商品详情页中需要显示商品库存，选择好sku的销售属性之后，
     * ajax异步来加载controller中的接口
     *
     * （2） 购物车中，在显示购物车数据的时候，购物车的后台，
     * 会去调用商品中心获取sku数据，也会调用库存中心来查找这个sku的库存数据
     * @param goodsSkuId 商品sku id
     * @return 库存数量
     */
    Long getSaleStockQuantity(Long goodsSkuId);
}
